<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>ALTER ROLE</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="REFENTRY">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="sql-alteropclass.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="sql-alteropclass.html">快退</a></td><td width="60%" align="center" valign="bottom"></td><td width="10%" align="right" valign="top"><a href="sql-alterschema.html">快进</a></td><td width="10%" align="right" valign="top"><a href="sql-alterschema.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<h1><a name="SQL-ALTERROLE"></a>ALTER ROLE</h1>
<div class="REFNAMEDIV"><a name="AEN44492"></a><h2>名称</h2>ALTER ROLE&nbsp;--&nbsp;修改一个数据库角色</div>
<a name="AEN44495"></a>
<div class="REFSYNOPSISDIV"><a name="AEN44497"></a><h2>语法</h2>
<pre class="SYNOPSIS">ALTER ROLE <tt class="REPLACEABLE"><i>name</i></tt> [ [ WITH ] <tt class="REPLACEABLE"><i>option</i></tt> [ ... ] ]

这里的 <tt class="REPLACEABLE"><i>option</i></tt> 可以是：

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | CONNECTION LIMIT <tt class="REPLACEABLE"><i>connlimit</i></tt>
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD '<tt class="REPLACEABLE"><i>password</i></tt>'
    | VALID UNTIL '<tt class="REPLACEABLE"><i>timestamp</i></tt>'

ALTER ROLE <tt class="REPLACEABLE"><i>name</i></tt> RENAME TO <tt class="REPLACEABLE"><i>newname</i></tt>

ALTER ROLE <tt class="REPLACEABLE"><i>name</i></tt> SET <tt class="REPLACEABLE"><i>configuration_parameter</i></tt> { TO | = } { <tt class="REPLACEABLE"><i>value</i></tt> | DEFAULT }
ALTER ROLE <tt class="REPLACEABLE"><i>name</i></tt> RESET <tt class="REPLACEABLE"><i>configuration_parameter</i></tt></pre>
</div>
<div class="REFSECT1"><a name="AEN44512"></a><h2>描述</h2>
<p><tt class="COMMAND">ALTER ROLE</tt> 修改一个数据库角色的属性。</p>
<p>这个命令的第一个变体可以修改很多 <a href="sql-createrole.html"><i>CREATE ROLE</i></a> 里面声明的角色属性，可以参阅相应手册页获取细节。所有可能的属性都有介绍，除了增加和删除成员关系的选项之外(使用 <a href="sql-grant.html"><i>GRANT</i></a> 和 <a href="sql-revoke.html"><i>REVOKE</i></a> 做这件事)。没有在命令里提到的属性维持它们以前的设置。数据库超级用户可以给任何角色改变任何设置。拥有 <tt class="LITERAL">CREATEROLE</tt> 权限的角色可以修改任意这些设置，但是只能给非超级用户角色设置。普通的角色只能修改它们自己的口令。</p>
<p>第二个变种修改角色的名称。数据库超级用户可以修改任何角色的名称。拥有 <tt class="LITERAL">CREATEROLE</tt> 权限的角色可以给非超级用户进行重命名。当前会话的用户是不能改名的。如果需要这么做，必须以另外一个用户的身份连接。因为 <tt class="LITERAL">MD5</tt> 加密的口令使用角色名字作为加密的盐粒，所以，如果口令是 <tt class="LITERAL">MD5</tt> 加密的，那么给一个用户改名会清空其口令。</p>
<p>第三和第四个变体为特定的配置变量修改一个角色的会话缺省值。在该角色随后开始一个新的会话之后，指定的数值会覆盖 <tt class="FILENAME">postgresql.conf</tt> 里面的或者 <tt class="COMMAND">postgres</tt> 命令行上的参数，而变成会话缺省值。对于没有 <tt class="LITERAL">LOGIN</tt> 权限的角色，会话的缺省值没有什么意义。普通的角色可以改变自己的会话缺省。超级用户可以修改任何人的会话缺省。拥有 <tt class="LITERAL">CREATEROLE</tt> 权限的角色可以给非超级用户修改缺省。有些变量不能用这个方法设置，或者是只能由超级用户来设置。</p>
</div>
<div class="REFSECT1"><a name="AEN44531"></a><h2>参数</h2>
<div class="VARIABLELIST">
<dl>
<dt><tt class="REPLACEABLE"><i>name</i></tt></dt>
<dd><p>需要修改属性的角色的名称</p></dd>
<dt><tt class="LITERAL">SUPERUSER</tt><br><tt class="LITERAL">NOSUPERUSER</tt><br><tt class="LITERAL">CREATEDB</tt><br><tt class="LITERAL">NOCREATEDB</tt><br><tt class="LITERAL">CREATEROLE</tt><br><tt class="LITERAL">NOCREATEROLE</tt><br><tt class="LITERAL">CREATEUSER</tt><br><tt class="LITERAL">NOCREATEUSER</tt><br><tt class="LITERAL">INHERIT</tt><br><tt class="LITERAL">NOINHERIT</tt><br><tt class="LITERAL">LOGIN</tt><br><tt class="LITERAL">NOLOGIN</tt><br><tt class="LITERAL">CONNECTION LIMIT</tt> <tt class="REPLACEABLE"><i>connlimit</i></tt><br><tt class="LITERAL">PASSWORD</tt> <tt class="REPLACEABLE"><i>password</i></tt><br><tt class="LITERAL">ENCRYPTED</tt><br><tt class="LITERAL">UNENCRYPTED</tt><br><tt class="LITERAL">VALID UNTIL</tt> '<tt class="REPLACEABLE"><i>timestamp</i></tt>'</dt>
<dd><p>这些子句修改最初由 <a href="sql-createrole.html"><i>CREATE ROLE</i></a> 设置的属性，参阅该命令获取更多信息。</p></dd>
<dt><tt class="REPLACEABLE"><i>newname</i></tt></dt>
<dd><p>角色的新名称</p></dd>
<dt><tt class="REPLACEABLE"><i>configuration_parameter</i></tt><br><tt class="REPLACEABLE"><i>value</i></tt></dt>
<dd><p>把该角色指定的配置参数缺省值设置为给定值。如果 <tt class="REPLACEABLE"><i>value</i></tt> 是 <tt class="LITERAL">DEFAULT</tt> 或等效的 <tt class="LITERAL">RESET</tt> ，则删除特定角色的变量设置，这样该角色将在新的会话里继承系统范围的缺省值。使用 <tt class="LITERAL">RESET ALL</tt> 清理所有角色相关的设置。</p>
<p>参阅 <a href="sql-set.html"><i>SET</i></a> 和<a href="runtime-config.html">章17</a>获取有关允许的参数名字和数值的更多信息。</p></dd>
</dl>
</div>
</div>
<div class="REFSECT1"><a name="AEN44599"></a><h2>注意</h2>
<p>使用 <a href="sql-createrole.html"><i>CREATE ROLE</i></a> 增加新角色，使用 <a href="sql-droprole.html"><i>DROP ROLE</i></a> 删除旧角色。</p>
<p><tt class="COMMAND">ALTER ROLE</tt> 不能改变角色的成员关系。可以使用 <a href="sql-grant.html"><i>GRANT</i></a> 和 <a href="sql-revoke.html"><i>REVOKE</i></a> 做这个事情。</p>
<p>使用这个命令指定一个未加密的密码时必须小心，因为密码将以明文方式传送到服务器，并且可能被客户端命令历史记录或者被服务器日志记录。<a href="app-psql.html"><i><i>psql</i></i></a> 包含一个可以用来安全修改角色密码的 <tt class="COMMAND">\password</tt> 命令。</p>
<p>也可以把会话缺省与数据库绑定而不是与角色绑定；参阅 <a href="sql-alterdatabase.html"><i>ALTER DATABASE</i></a> 。如果有冲突，那么特定于角色的设置将覆盖特定于数据库的设置。</p>
</div>
<div class="REFSECT1"><a name="AEN44613"></a><h2>例子</h2>
<p>改变一个角色的口令：</p>
<pre class="PROGRAMLISTING">ALTER ROLE davide WITH PASSWORD 'hu8jmn3';</pre>
<p>改变口令失效的日期，声明口令应该在 2015 年 5 月 4 日中午失效，时区比 UTC 早一个小时：</p>
<pre class="PROGRAMLISTING">ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';</pre>
<p>令一个口令永远有效：</p>
<pre class="PROGRAMLISTING">ALTER ROLE fred VALID UNTIL 'infinity';</pre>
<p>给予一个角色创建其它角色和新数据库的能力：</p>
<pre class="PROGRAMLISTING">ALTER ROLE miriam CREATEROLE CREATEDB;</pre>
<p>给一个角色设置非缺省的 <a href="runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM">maintenance_work_mem</a> 参数值：</p>
<pre class="PROGRAMLISTING">ALTER ROLE worker_bee SET maintenance_work_mem = 100000;</pre>
</div>
<div class="REFSECT1"><a name="AEN44627"></a><h2>兼容性</h2>
<p><tt class="COMMAND">ALTER ROLE</tt> 语句是一个 PostgreSQL 扩展。</p>
</div>
<div class="REFSECT1"><a name="AEN44632"></a><h2>又见</h2><a href="sql-createrole.html"><i>CREATE ROLE</i></a>, <a href="sql-droprole.html"><i>DROP ROLE</i></a>, <a href="sql-set.html"><i>SET</i></a></div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="sql-alteropclass.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="sql-alterschema.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">ALTER OPERATOR CLASS</td><td width="34%" align="center" valign="top"><a href="sql-commands.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">ALTER SCHEMA</td></tr>
</table>
</div>
</body></html>